// http://157.122.54.189:9083/post/1

function nativeXHR() {
  const xhr = new XMLHttpRequest()

  xhr.open('get', 'http://157.122.54.189:9083/post/1')

  xhr.send()

  // xhr.onreadystatechange xhr.status == 200 xhr.readyState == 4

  xhr.onload = function () {
    console.log(JSON.parse(xhr.responseText));
  }
}

// 回调函数封装的逻辑
const $ = {
  ajax: function(options) {
    const xhr = new XMLHttpRequest()

    xhr.open(options.method, options.url)

    xhr.send()

    // xhr.onreadystatechange xhr.status == 200 xhr.readyState == 4

    xhr.onload = function () {
      options.success(JSON.parse(xhr.responseText))
    }
  }
}

// axios promisse 形式的封装说明
const myAxios = function (options) {

  const method = options.method ||'get'
  // 使用 promise 对象封装异步方法
  // 使用 new Promise 创建实例, 传入一个回调函数调用异步方法
  // 这个回调默认可以接受的第一个参数就是成功的回调
  // 注意这个 promise 对象需要被返回
  return new Promise((resolve, reject)=>{
    // new Promise 的时候, 默认第一个参数
    // 是成功回调 resolve,
    // 第二个参数就是失败回调, 
    // 开发者可以在自己认为出错的时候, 使用这个函数
    // 让外层的调用走到 .catch 逻辑当中

    if (!options.url) {
      // 这里应该报错
      return reject('缺失了url参数')
    }

    const xhr = new XMLHttpRequest()
  
    xhr.open(method, options.url)
  
    xhr.send()
  
    // xhr.onreadystatechange xhr.status == 200 xhr.readyState == 4
  
    xhr.onload = function () {
      resolve(JSON.parse(xhr.responseText))
      // 替代了以前作者规定的 success(res) 成功回调函数
      // console.log(JSON.parse(xhr.responseText));
    }
  })
}

// myAxios({
//   method: 'get',
//   url: 'http://157.122.54.189:9083/post/1'
// }).then(res=>{
//   console.log('请求成功');
//   console.log(res);
// })